package eventos.abrir;

import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

import logica.Entidad;

import controlador.ControladorEditor;
import eventos.EventoCancelarEdición;
import eventos.aceptar.EventoAceptarEntidadEditada;

import vista.objetos.EntidadGraficable;
import vista.paneles.ElementoNoExistenteException;
import vista.ventanas.VentanaEntidad;


public class EventoEditarVentanaEntidad extends EventoAbrirVentanaEntidadNueva
{
	private EntidadGraficable entidad;
	
	public EventoEditarVentanaEntidad(JFrame ventanaPadre, ControladorEditor controlador, EntidadGraficable entidadAEditar) 
	{
		super(ventanaPadre, controlador, controlador, controlador);
		
		this.entidad = entidadAEditar;
	}

	@Override
	public void mouseReleased(MouseEvent event)
	{		
		VentanaEntidad ventana;
		Entidad entidad = (Entidad) this.entidad.getObjetoDiagramaDecorado();
		try
		{
			ventana = new VentanaEntidad(this.getVentanaPadre(), this.getControlador().getProyectoActual().getTipoDeEntidades(), entidad);
			
			/*
			 * guardo el estado que tenía la entidad antes de ser editada por si el usuario
			 * decide cancelar la edición.
			 */
			super.getControlador().setGraficableEditando(this.entidad.getMementoGenerico());
			
			EventoAceptarEntidadEditada eventoAceptar = new EventoAceptarEntidadEditada(ventana, this.getControlador(), this.entidad);
			ventana.escucharEventosBotonAceptar(eventoAceptar);
			
			EventoCancelarEdición eventoCancelar = new EventoCancelarEdición();
			ventana.escucharEventosBotonCancelar(eventoCancelar);
			
			agregarEventosAVentana(ventana);
			ventana.setVisible(true);
		}
		catch (ElementoNoExistenteException e)
		{
			JOptionPane.showMessageDialog(this.getVentanaPadre(), e.getMessage(), "Tipo de Entidad no existente", JOptionPane.ERROR_MESSAGE);
		}


	}
}